package pl.uz.zgora.plan;

import java.util.ArrayList;

import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;

public class BudynekDataSource {
	private SQLiteDatabase database;
	
	public BudynekDataSource(final SQLiteDatabase database)
	{
		this.database = database;
	}
	
	public boolean addBudynek(final Budynek budynek)
	{
		if(!database.isOpen())
			throw new SQLiteException("Database not open!");
		
		if(database.isReadOnly())
			throw new SQLiteException("Wrong database connection!");
		
		ContentValues values = new ContentValues();
		values.put(PlanDatabaseHandler.KEY_BUDYNEK, budynek.getIdBudynku());
		values.put(PlanDatabaseHandler.KEY_WYDZIAL, budynek.getWydzial());
		values.put(PlanDatabaseHandler.KEY_ULICA, budynek.getUlica());
		values.put(PlanDatabaseHandler.KEY_MIASTO, budynek.getMiasto());
		values.put(PlanDatabaseHandler.KEY_KOD_POCZTOWY, budynek.getKod_pocztowy());
		
		if(database.insert(PlanDatabaseHandler.TABLE_BUDYNEK, null, values) == -1) {
			database.close();
			return false;
		}
		
		return true;
	}
	
	public boolean addBudynekList(final ArrayList<Budynek> budynki)
	{
		if(budynki == null || budynki.size() == 0) {
			return false;
		}
		
		for(Budynek budynek: budynki) {
			if(!addBudynek(budynek)) {
				return false;
			}
		}
		
		database.close();
		
		return true;
	}
	
	public ArrayList<Budynek> getBudynki(final String[] idBudynkow)
	{
		if(!database.isOpen())
			throw new SQLiteException("Database not open!");
		
		ArrayList<Budynek> budynki = new ArrayList<Budynek>();
		Cursor cursor = null;
		
		if(idBudynkow != null) {
			String query = "?";
			if(idBudynkow.length > 1) {
				for(int i = 1; i < idBudynkow.length; i++) {
					query += ",?";
				}
			}
			cursor = database.query(PlanDatabaseHandler.TABLE_BUDYNEK, null, "idBudynku IN(" + query + ")", idBudynkow, null, null, null);
		}
			
		cursor.moveToFirst();
		while (!cursor.isAfterLast()) {
			final Budynek budynek = BudynekDataSource.cursorToBudynek(cursor);
			if(!budynki.contains(budynek))
				budynki.add(budynek);
			cursor.moveToNext();
		}
		// Make sure to close the cursor
		cursor.close();

		return budynki;
	}
	
	public static Budynek cursorToBudynek(final Cursor cursor)
	{
		Budynek budynek = new Budynek();
		budynek.setIdBudynku(cursor.getString(0));
		budynek.setWydzial(cursor.getString(1));
		budynek.setUlica(cursor.getString(2));
		budynek.setMiasto(cursor.getString(3));
		budynek.setKod_pocztowy(cursor.getString(4));
		return budynek;
	}
}
